﻿Imports System.Data.SqlClient

Public Class UsuarioDAO


    Public Function insertar(ByVal modelo As Usuario) As Usuario
        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "INSERT INTO USUARIO (idRol, nombre, correo, paterno, materno, dni, direccion, fecha_naci, estado, clave, telefono, ciudad) VALUES ( @VALOR2, @VALOR3, @VALOR4, @VALOR5, @VALOR6, @VALOR7, @VALOR8, @VALOR9, @VALOR10, @VALOR11, @VALOR12, @VALOR13)"

            Dim cmd As New SqlCommand(sql, cn)

            cmd.Parameters.AddWithValue("@VALOR2", modelo.idRol)
            cmd.Parameters.AddWithValue("@VALOR3", modelo.nombre)
            cmd.Parameters.AddWithValue("@VALOR4", modelo.correo)
            cmd.Parameters.AddWithValue("@VALOR5", modelo.paterno)
            cmd.Parameters.AddWithValue("@VALOR6", modelo.materno)
            cmd.Parameters.AddWithValue("@VALOR7", modelo.dni)
            cmd.Parameters.AddWithValue("@VALOR8", modelo.direccion)
            cmd.Parameters.AddWithValue("@VALOR9", modelo.fechanaci)
            cmd.Parameters.AddWithValue("@VALOR10", modelo.estado)
            cmd.Parameters.AddWithValue("@VALOR11", modelo.clave)
            cmd.Parameters.AddWithValue("@VALOR12", modelo.telefono)
            cmd.Parameters.AddWithValue("@VALOR13", modelo.ciudad)

            Dim afectados = cmd.ExecuteNonQuery

            If afectados <> 1 Then
                Throw New DAOExcepcion("UsuarioDAO: No insertó")
            End If

            ' LEER EL ULTIMO ID
            sql = "SELECT @@IDENTITY"
            cmd = New SqlCommand(sql, cn)
            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()
            If dr.Read Then
                modelo.idUsuario = CType(dr(0), Integer)
            End If

            dr.Close()
            cn.Close()

        Catch ex As Exception
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return modelo
    End Function


    Public Function buscarPorNombre(ByVal nombre As String) As Collection
        Dim lista As New Collection

        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "SELECT IDUSUARIO, IDROL, NOMBRE, CORREO, PATERNO, MATERNO, DNI, DIRECCION, FECHA_NACI, ESTADO, CLAVE, TELEFONO, CIUDAD FROM USUARIO WHERE UPPER(nombre) LIKE @VALOR3"
            Dim cmd As New SqlCommand(sql, cn)
            cmd.Parameters.AddWithValue("@VALOR3", "%" + nombre.ToUpper + "%")

            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()

            While dr.Read
                Dim modelo As New Usuario

                modelo.idUsuario = dr(0).ToString
                modelo.idRol = dr(1).ToString
                modelo.nombre = dr(2).ToString
                modelo.correo = dr(3).ToString
                modelo.paterno = dr(4).ToString
                modelo.materno = dr(5).ToString
                modelo.dni = dr(6).ToString
                modelo.direccion = dr(7).ToString
                modelo.fechanaci = dr(8).ToString
                modelo.estado = dr(9).ToString
                modelo.clave = dr(10).ToString
                modelo.telefono = dr(11).ToString
                modelo.ciudad = dr(12).ToString

                lista.Add(modelo)
            End While

            dr.Close()

            cn.Close()

        Catch ex As SqlException
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return lista
    End Function

    Public Function login(ByVal correo As String, ByVal clave As String) As Usuario

        Dim modelo As New Usuario

        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "SELECT IDUSUARIO, IDROL, NOMBRE, CORREO, PATERNO, MATERNO, DNI, DIRECCION, FECHA_NACI, ESTADO, CLAVE, TELEFONO, CIUDAD FROM USUARIO WHERE CORREO=@VALOR1 AND CLAVE=@VALOR2"
            Dim cmd As New SqlCommand(sql, cn)
            cmd.Parameters.AddWithValue("@VALOR1", correo)
            cmd.Parameters.AddWithValue("@VALOR2", clave)

            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()

            If dr.Read Then

                modelo.idUsuario = dr(0).ToString
                modelo.idRol = dr(1).ToString
                modelo.nombre = dr(2).ToString
                modelo.correo = dr(3).ToString
                modelo.paterno = dr(4).ToString
                modelo.materno = dr(5).ToString
                modelo.dni = dr(6).ToString
                modelo.direccion = dr(7).ToString
                modelo.fechanaci = dr(8).ToString
                modelo.estado = dr(9).ToString
                modelo.clave = dr(10).ToString
                modelo.telefono = dr(11).ToString
                modelo.ciudad = dr(12).ToString

            Else
                Throw New DAOExcepcion("Usuario y/o clave incorrecto")

            End If
            dr.Close()

            ' OBTENER SUS ROLES

            sql = "SELECT B.IDROL, B.NOMBRE, B.DESCRIPCION FROM USUARIO_ROL A, ROL B WHERE A.IDROL=B.IDROL AND A.IDUSUARIO = @VALOR1"
            cmd = New SqlCommand(sql, cn)
            cmd.Parameters.AddWithValue("@VALOR1", modelo.idUsuario)

            Dim listadoRoles As New Collection

            dr = cmd.ExecuteReader
            While dr.Read
                Dim r As New Rol
                r.idRol = dr(0).ToString
                r.nombre = dr(1).ToString
                r.descripcion = dr(2).ToString
                listadoRoles.Add(r)
            End While

            modelo.usuarios = listadoRoles

            cn.Close()
        Catch ex As SqlException
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return modelo
    End Function

    Public Function listar() As Collection
        Dim lista As New Collection

        Try
            Dim cn As New SqlConnection(ConexionBD.obtenerCadenaConexion())
            cn.Open()

            Dim sql = "SELECT IDUSUARIO, IDROL, NOMBRE, CORREO, PATERNO, MATERNO, DNI, DIRECCION, FECHA_NACI, ESTADO, CLAVE, TELEFONO, CIUDAD FROM USUARIO"
            Dim cmd As New SqlCommand(sql, cn)

            Dim dr As SqlDataReader
            dr = cmd.ExecuteReader()
            While dr.Read
                Dim gato As New Usuario
                gato.idUsuario = dr(0).ToString
                gato.idRol = dr(1).ToString
                gato.nombre = dr(2).ToString
                gato.correo = dr(3).ToString
                gato.paterno = dr(4).ToString
                gato.materno = dr(5).ToString
                gato.dni = dr(6).ToString
                gato.direccion = dr(7).ToString
                gato.fechanaci = dr(8).ToString
                gato.estado = dr(9).ToString
                gato.clave = dr(10).ToString
                gato.telefono = dr(11).ToString
                gato.ciudad = dr(12).ToString



                lista.Add(gato)
            End While

            dr.Close()
            cn.Close()

        Catch ex As SqlException
            Throw New DAOExcepcion(ex.ToString)
        End Try

        Return lista
    End Function






End Class
